package cl.sodexo.com.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import cl.sodexo.com.dto.Estado;
import cl.sodexo.com.dto.Requerimiento;
import cl.sodexo.com.dto.TipoRequerimiento;
import cl.sodexo.com.dto.Usuario;
import cl.sodexo.com.form.JefaturaRequerimientosForm;
import cl.sodexo.com.utils.Constantes;

public class ListRequerimientosCursoAction extends AbstractManagerDAO {
	
	private static final Logger logger = Logger.getLogger(ListRequerimientosCursoAction.class);
	private static final String FILTRAR= "Filtrar";
	private static final String ACTION = "action";
	
	public ActionForward execute(ActionMapping mapping, ActionForm form, 
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		HttpSession session	= request.getSession();
		Usuario user		= (Usuario) session.getAttribute(Constantes.USEROBJ); 
		
		if(!(Boolean) request.getSession().getAttribute(Constantes.SESSION)){
			return mapping.findForward(Constantes.ERROR); //TODO verificar página de dirección login
		}else if(!user.getPerfil().getIdPerfil().equals(Constantes.OP)
				&& !user.getPerfil().getIdPerfil().equals(Constantes.ADMIN)){
			return mapping.findForward(Constantes.ERROR); //TODO verificar página de dirección login
		}else{
			logger.info("session: " + user.getUsername());
			
			JefaturaRequerimientosForm jefeFrm = (JefaturaRequerimientosForm) form;
			jefeFrm.setEstados(super.getEstadoDAO().listaEstados());
			jefeFrm.setListTiposReq(super.getTipoReqDAO().listaTipos());
			jefeFrm.setListaUsuarios(super.getUsuarioDAO().listUsuariosPerfil(Constantes.USER));
			
			String filtrar = request.getParameter(ACTION);
			logger.info(FILTRAR + ": " + filtrar);
			
			if(filtrar != null && filtrar.equals(FILTRAR)){
				logger.info("estado: " + jefeFrm.getEstadoSelectItem());
				logger.info("tipo: " + jefeFrm.getTipoSelectItem());
				logger.info("usuario: " + jefeFrm.getUsuarioSelectItem());
				
				Requerimiento req = new Requerimiento();
				
				if(jefeFrm.getEstadoSelectItem() != null && !jefeFrm.getEstadoSelectItem().equals("0")){
					Estado estado = new Estado();
					estado.setIdEstado(jefeFrm.getEstadoSelectItem());
					req.setEstado(estado);
				}
				
				if(jefeFrm.getTipoSelectItem() != null && !jefeFrm.getTipoSelectItem().equals("0")){
					TipoRequerimiento tipo = new TipoRequerimiento();
					tipo.setIdTipo(jefeFrm.getTipoSelectItem());
					req.setTipoRequerimiento(tipo);
				}
				
				if(jefeFrm.getUsuarioSelectItem() != null && !jefeFrm.getUsuarioSelectItem().equals("0")){
					Usuario usuario = new Usuario();
					usuario.setIdUsuario(jefeFrm.getUsuarioSelectItem());
					req.setUsuarioSolicitante(usuario);
				}
				
				jefeFrm.setRequerimientos(super.getRequerimientoDAO().getRequerimientosJefatura(req));
				
			}else{
				jefeFrm.setRequerimientos(super.getRequerimientoDAO().getRequerimientosJefatura(null));
			}
    	    
			logger.info("select: " + jefeFrm.getKey());
			
			jefeFrm.setKey("");
    	    return mapping.findForward(Constantes.SUCCESS);
		}
	}

}
